#!/usr/bin/env python
"""
环境变量更新脚本 - 用于在部署后修改.env文件中的环境变量
使用方法: python update_env.py KEY1=VALUE1 KEY2=VALUE2 ...
"""

import os
import sys
import re
from pathlib import Path

# 获取项目根目录
BASE_DIR = Path(__file__).resolve().parent.parent
ENV_FILE = os.path.join(BASE_DIR, '.env')

def update_env_file(updates):
    """更新.env文件中的环境变量"""
    # 检查.env文件是否存在
    if not os.path.exists(ENV_FILE):
        print(f"错误: .env文件不存在: {ENV_FILE}")
        return False
    
    # 读取现有.env文件
    with open(ENV_FILE, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    
    # 解析为字典
    env_vars = {}
    for line in lines:
        line = line.strip()
        if line and not line.startswith('#'):
            key, value = line.split('=', 1)
            env_vars[key.strip()] = value.strip()
    
    # 应用更新
    updated = False
    for update in updates:
        if '=' in update:
            key, value = update.split('=', 1)
            key = key.strip()
            value = value.strip()
            
            # 如果值包含空格但没有引号，添加引号
            if ' ' in value and not (value.startswith('"') and value.endswith('"')):
                value = f'"{value}"'
            
            if key in env_vars:
                if env_vars[key] != value:
                    env_vars[key] = value
                    updated = True
                    print(f"已更新: {key}={value}")
                else:
                    print(f"无变化: {key}已有相同的值")
            else:
                env_vars[key] = value
                updated = True
                print(f"已添加: {key}={value}")
    
    if not updated:
        print("没有更新任何环境变量")
        return False
    
    # 写回.env文件
    with open(ENV_FILE, 'w', encoding='utf-8') as f:
        for key, value in env_vars.items():
            f.write(f"{key}={value}\n")
    
    print(f"已更新.env文件: {ENV_FILE}")
    return True

def generate_secret_key():
    """生成Django SECRET_KEY"""
    import random
    chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
    return ''.join(random.choice(chars) for _ in range(50))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("用法: python update_env.py KEY1=VALUE1 KEY2=VALUE2 ...")
        print("特殊命令:")
        print("  --generate-secret  生成新的SECRET_KEY并更新")
        sys.exit(1)
    
    updates = []
    
    for arg in sys.argv[1:]:
        if arg == '--generate-secret':
            secret_key = generate_secret_key()
            updates.append(f"SECRET_KEY={secret_key}")
            print(f"已生成新的SECRET_KEY")
        elif '=' in arg:
            updates.append(arg)
        else:
            print(f"忽略无效参数: {arg}")
    
    if updates:
        update_env_file(updates)
    else:
        print("没有有效的更新参数") 